{{tag>serveur réseau}}
------

====== Lighttpd : Un serveur web léger ======


{{ light_logo_170px.png}}

**Lighttpd** est un serveur web (//HTTP//) qui, de par sa légèreté, se veut rapide. Il supporte un grand nombre de fonctionnalités comparables à celles d'[[:apache2|Apache]] (comme les rewrite, fast-cgi, proxy, etc.) pour des performances aussi bonnes sinon meilleures dans les tests faits par Lighttpd.

Par rapport à Apache, il ne supporte pas les fichiers htaccess ou encore htpasswd. Ces 2 problèmes sont contournables si vous avez accès à la configuration de votre serveur.

Lighttpd se trouve dans le top 5 des serveurs les plus utilisés dans le monde. Cette page est là pour vous expliquer comment l'installer et comment l'utiliser de manière simple.

===== Installation =====

Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt://lighttpd|lighttpd]]**.

===== Configuration =====
Tous les fichiers de configuration se trouvent dans **/etc/lighttpd**.
==== /etc/lighttpd ====
Voici ce que vous pouvez trouver dans ce répertoire.
  lighttpd.conf conf-available conf-enabled

  * Le fichier **lighttpd.conf** est le fichier de configuration principal à partir duquel les directives principales sont chargées.
  * **conf-available** est un dossier qui contient les fichiers de configuration des différents modules.
  * **conf-enabled** est un dossier 
===Le fichier lighttpd.conf===
Le plus important est de configurer la directive suivante qui définit la racine de Lighttpd.
<code>
server.document-root       = "/votre/chemin/"
</code>
Quelle que soit la modification faite dans le fichier de configuration, il est possible de vérifier que la syntaxe est correcte avec la commande suivante:
  lighttpd -t -f /etc/lighttpd/lighttpd.conf

**/etc/lighttpd/lighttpd.conf** pouvant, bien sûr, être remplacé par l'adresse de votre fichier de configuration.
==Les modules==
La première partie du fichier consiste en l'activation des différents modules du serveur. Pour activer un module, il suffit de décommenter sa ligne ou utiliser la commande **lighty-enable-mod** que nous verrons un peu plus loin.
<code>
server.modules              = (
            "mod_access",
            "mod_alias",
...
#           "mod_flv_streaming",
#           "mod_evasive"
)
</code>
Il est possible de retrouver une documentation détaillée des différents modules sur le wiki officiel de Lighttpd: [[http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs#Modules]]

Une documentation plus exhaustive sur les différentes directives de configuration sont disponibles à l'adresse suivante:
[[http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions]]

==== PHP et MySQL ====

Nous allons mettre en place le langage PHP5 et configurer Lighttpd pour qu'il puisse l'interpréter.

[[:tutoriel:comment_installer_un_paquet|Installer le paquet]] [[apt://php5-cgi|php5-cgi]] et éventuellement [[apt://php5-gd|php5-gd]].

Exécutez la commande suivante pour activer le module fastcgi :
  sudo lighty-enable-mod fastcgi
  
Depuis  Ubuntu 10.10, il faut activer le module fastcgi-php pour que cela fonctionne (sous Ubuntu 10.04 sauter l'étape) :
  sudo lighty-enable-mod fastcgi-php
  
Puis rechargez la configuration de lighttpd:
  sudo /etc/init.d/lighttpd force-reload

Enfin, on teste que le serveur prend bien en compte PHP (nb: si vous avez changé le chemin de //server.document-root//, remplacez // /var/www/ // par le chemin que vous avez indiqué):    
  sudo sh -c 'echo "<?PHP phpinfo(); ?>" > /var/www/test.php'
  sudo chown -R www-data:www-data /var/www/test.php
  w3m http://localhost/test.php

Lors du test ci-dessus si vous rencontrez une **erreur 403**, ajoutez à la fin du fichier **/etc/php5/cgi/php.ini**  :
  cgi.fix_pathinfo = 1
(//source erreur 403// : [[http://www.ubuntugeek.com/lighttpd-webserver-setup-with-php5-and-mysql-support.html|ubuntugeek.com]])
<note tip>Si, sous **Ubuntu 11.10**, la correction du fichier /etc/php5/cgi/php.ini ne suffit pas
 <code> sudo nano /etc/lighttpd/lighttpd.conf </code>
et ajoutez-y
<code>fastcgi.server = ( ".php" => (( 
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket" 
                 )))</code>
[[http://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialLighttpdAndPHP#Configuration|Tutoriel pour Lighttpd et PHP (en)]] \\ 
FIXME                 
                 </note>
                 
                 
<note tip>Sous **Ubuntu 12.04** ajouter uniquement dans le fichier /etc/lighttpd/lighttpd.conf , au niveau des modules (ligne 7):
<code>
server.modules = (
                   "mod_fastcgi",
                 )
 </code>
 </note>
==== MySql ====
Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer les paquets]] suivants :
**[[apt://mysql-client,mysql-server,php5-mysql]]**
Et éventuellement PHPMyAdmin :
**[[apt://phpmyadmin|phpmyadmin]]**

Lors de l'installation, vous serez tout d'abord invité à indiquer à MySql qu'il fonctionnera avec Lighttpd.
Puis vous serez amenés à choisir un mot de passe pour l'accès root à phpmyadmin.

Après l'installation de ces paquets, il faut saisir les commandes suivantes :

  sudo lighty-enable-mod fastcgi userdir
  sudo /etc/init.d/mysql start
  sudo /etc/init.d/lighttpd restart


Si vous avez installé PHPMyAdmin, la base de données est alors accessible à l'adresse suivante : http://localhost/phpmyadmin


==== Ruby ====

<note warning>Cette procédure est obsolète, cependant, les fichiers de configuration peuvent servir.</note>

Deux exemples de configuration, le premier avec fastcgi (qui ne fonctionne plus avec Redmine 2), le second avec thin (un second serveur). Prenez garde aux chemins utilisés dans ces exemples.

<code># /etc/lighttpd/conf-available/redmine.conf
# avec fastcgi
$HTTP["host"] =~ "ruby.votresite.fr" {

	server.document-root = "/usr/share/redmine/public/"
	accesslog.filename   = "/var/log/lighttpd/redmine.access.log"
	server.error-handler-404 = "/dispatch.fcgi"
	server.indexfiles = ( "dispatch.fcgi" )

	fastcgi.server += (
		".fcgi" => (
			"redmine" => (
				"min-procs" => 1,
				"max-procs" => 2,
				"socket"    => "/tmp/redmine-default-fcgi.socket",
				"bin-path"  => "/usr/share/redmine/public/dispatch.fcgi",
				"bin-environment" => (
					"RAILS_RELATIVE_URL_ROOT" => "",
					"X_DEBIAN_SITEID" => "default"
				),
				"kill-signal" => 10 # this is because programs linked against libfcgi need USR1 kill-signal
			)
		)
	)

	# quelques exemples
	#alias.url += ( "/plugin_assets/" => "/var/cache/redmine/default/plugin_assets/" )
	#url.rewrite-if-not-file = (
	#	"favicon.ico$" => "/favicon.ico",
	#	"apple-touch-.*png$" => "/apple-touch-icon.png"
	#)
	#$SERVER["socket"] == ":80" {
	#	$HTTP["url"] =~ "^/robots.txt$" {
	#		url.rewrite = ( "robots.txt$" => "/robots.http.txt" )
	#	}
	#	$HTTP["url"] !~ "^/robots.http.txt$" {
	#		url.redirect = ( "^/(.*)" => "https://ruby.votresite.fr/$1" )
	#	}
	#}
	#$SERVER["socket"] == ":443" {
	#	ssl.engine  = "enable"
	#	ssl.pemfile = "/etc/ssl/private/votresite.crt"
	#	ssl.ca-file = "/etc/ssl/private/ca-certs.crt"
	#	setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=31536000" )
	#}
}</code>

<code># /etc/lighttpd/conf-available/redmine.conf
# avec Thin
$HTTP["host"] =~ "ruby.votresite.fr" {

	server.document-root = "/usr/share/redmine/public/"
	accesslog.filename   = "/var/log/lighttpd/redmine.access.log"

	$HTTP["url"] !~ "^/(images|javascripts|stylesheets|themes|plugin_assets|favicon.ico|apple-touch-icon.png)|.*html$|.*txt$|.*xml$" {
		proxy.balance = "fair"
		proxy.server =  ("/" => (
			( "host" => "127.0.0.1", "port" => 3000 ),
			( "host" => "127.0.0.1", "port" => 3001 ),
			( "host" => "127.0.0.1", "port" => 3002 ),
			( "host" => "127.0.0.1", "port" => 3003 )
		))
	}

	# quelques exemples
	#url.rewrite-if-not-file = (
	#	"favicon.ico$" => "/favicon.ico",
	#	"apple-touch-.*png$" => "/apple-touch-icon.png"
	#)
	#$SERVER["socket"] == ":80" {
	#	$HTTP["url"] =~ "^/robots.txt$" {
	#		url.rewrite = ( "robots.txt$" => "/robots.http.txt" )
	#	}
	#	$HTTP["url"] !~ "^/robots.http.txt$" {
	#		url.redirect = ( "^/(.*)" => "https://ruby.votresite.fr/$1" )
	#	}
	#}
	#$SERVER["socket"] == ":443" {
	#	ssl.engine  = "enable"
	#	ssl.pemfile = "/etc/ssl/private/votresite.crt"
	#	ssl.ca-file = "/etc/ssl/private/ca-certs.crt"
	#	setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=31536000" )
	#}
}

# /etc/thin2.1/thin.yml
---
chdir: "/usr/share/redmine"
environment: production
address: 0.0.0.0
port: 3000
servers: 4
timeout: 30
log: /var/log/redmine/default/thin.log
pid: /var/run/thin.pid
max_conns: 1024
max_persistent_conns: 512
require: []
wait: 30
daemonize: true
</code>
==== SSL ====

Pour utiliser un certificat SSL, il faut au préalable installer les paquets suivants :
<code>sudo apt-get install openssl ssl-cert</code>

Pour créer un certificat SSL auto-signé, il est possible d'utiliser la commande suivante :
<code>sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/localhost.pem</code>

Une fois le certificat créé, il faut modifier la configuration du serveur pour qu'il accepte les connexions HTTPS sur le port 443.
\\ Pour ce faire, il faut [[:tutoriel:comment_modifier_un_fichier|éditer le fichier]] **/etc/lighttpd/lighttpd.conf** avec les droits d'administration pour y ajouter les 3 lignes suivantes.
<code>$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/ssl/private/localhost.pem" }</code>

Dernière étape, le redémarrage du serveur.
<code>sudo service lighttpd restart</code>

Ensuite rendez vous sur https://localhost/
\\ Étant donné que le certificat SSL est auto-signé, une alerte de sécurité sera générée par le navigateur.

<note>En cas de problème, ajouter //ssl.use-sslv2 = "enable"// en dessous de //ssl.engine = "enable"//.
\\ https://bugs.launchpad.net/ubuntu/+source/lighttpd/+bug/645002</note>

===== Désinstallation =====

Pour supprimer cette application, il suffit de [[:tutoriel:comment_supprimer_un_paquet|supprimer son paquet]]. La configuration de l'application sera conservée ou supprimée selon la méthode de désinstallation que vous choisirez.

===== Voir aussi =====

  * **(en)** [[http://www.lighttpd.net/|Site officiel du projet Lighttpd]]
  * **(fr)** [[http://fr.wikipedia.org/wiki/Lighttpd|Lighttpd sur Wikipédia]]
  * **(en)** [[http://www.ubuntugeek.com/lighttpd-webserver-setup-with-php5-and-mysql-support.html|Configurer PHP5 pour Lighttpd]]
  * **(en)** <del>[[http://nanotux.com/blog/the-ultimate-server/3/#l-php5| The ultimate server]]</del> Error 404

----

//Contributeurs : [[utilisateurs:kagou|Patrice Vetsel]], [[utilisateurs:alteo_gange|alteo_gange]], [[utilisateurs:luigifab|luigifab]].//